#include <stdio.h>

#define DOOR(data, n) (((data&door_mask) >> 16) & (0x01<<n))  // 带参宏定义

int main(void)
{
    unsigned data[] = {0x12344520, 0xff004B1C, 0x00553C1E};

    // 掩码
    //                         data[0]: 0001 0010 0011 0100 0100 0101 0010 0000
    unsigned temp_mask = 0x000000FF; // 0000 0000 0000 0000 0000 0000 1111 1111
    unsigned humi_mask = 0x0000FF00; // 0000 0000 0000 0000 1111 1111 0000 0000
    unsigned door_mask = 0x000F0000; // 0000 0000 0000 1111 0000 0000 0000 0000
                                     // 0000 0000 0000 0110 
    unsigned ligt_mask = 0x00F00000; // 0000 0000 1111 0000 0000 0000 0000 0000

    printf("温度：%d\n", (data[0]&temp_mask) >> 0 );
    printf("湿度：%d\n", (data[0]&humi_mask) >> 8 );

    printf("门0状态：%s\n", DOOR(data[0], 0) ? "开" : "关"); // 0001
    printf("门1状态：%s\n", DOOR(data[0], 1) ? "开" : "关"); // 0010
    printf("门2状态：%s\n", DOOR(data[0], 2) ? "开" : "关"); // 0100
    printf("门3状态：%s\n", DOOR(data[0], 3) ? "开" : "关"); // 1000

    printf("门0状态：%s\n", (((data[0]&door_mask) >> 16) & 0x01) ? "开" : "关"); // 0001
    printf("门1状态：%s\n", (((data[0]&door_mask) >> 16) & 0x02) ? "开" : "关"); // 0010
    printf("门2状态：%s\n", (((data[0]&door_mask) >> 16) & 0x04) ? "开" : "关"); // 0100
    printf("门3状态：%s\n", (((data[0]&door_mask) >> 16) & 0x08) ? "开" : "关"); // 1000

    return 0;
}